home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / DSKEL-BAL.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  10KB  |  399 lines

  1.  
  2. //                            SKEL-BAL v1.0
  3.  
  4. //                         (BBS ADD/LIST DOOR)
  5.  
  6. //**********************
  7. //*****  Includes  *****
  8. //**********************
  9.  
  10. #include <proto/all.h>
  11. #include <stdio.h>
  12.  
  13. #include <string.h>
  14. #include <tempest/headers.h>
  15.  
  16. //********************************
  17. //*****  Structures/Defines  *****
  18. //********************************
  19.  
  20. struct MyMessage
  21.  {
  22.   struct Message Msg;
  23.   struct User User;
  24.   char text[255];
  25.   char text1[255];
  26.   int car,Value,Data;
  27.   long LongValue;
  28.   int  IntValue;
  29.  };
  30.  
  31. struct BBSLIST
  32.  {
  33.   char Name[21],
  34.        Number[21],
  35.        Location[21],
  36.        Sysop[21],
  37.        Groups[21],
  38.        Support[21],
  39.        Nodes[3],
  40.        Megs[5],
  41.        Baud[6];
  42.  };
  43.  
  44. struct BBSLIST BL;
  45. struct User User;
  46. struct MsgPort *MyPort = NULL;
  47. struct MyMessage *msg;
  48.  
  49. #define DROP if(EXIT_FLAG) CloseStuff();
  50.  
  51. void CloseStuff();
  52. void input(char mstring[],int len);
  53. void LineInput(char ostring[],char mstring[],int len);
  54. int  DOORIO();
  55.  
  56. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,first = 0;
  57. char DOOR_MSG [255],DOOR_MSG1[255],MyName[255],st[100];
  58. char string1[255],string2[255];
  59.  
  60. //*****************************
  61. //*****  PL (Print Line)  *****
  62. //*****************************
  63.  
  64. void pl(fmt,a1,a2,a3)
  65. char *fmt;
  66.  {
  67.   char s[255];
  68.   sprintf(s,fmt,a1,a2,a3);
  69.   DOOR_DATA=1; strcpy(DOOR_MSG,s); DOORIO();
  70.  }
  71.  
  72. //******************
  73. //*****  Main  *****
  74. //******************
  75.  
  76. void main(int argc,char *argv[])
  77. {
  78.  int Test = 1;
  79.  if(!DoorStart(argv[1])) { puts("Tempest Door!\n"); exit(0); }
  80.  while(Test)
  81.   {
  82.    pl("\f[DSKEL-BAL v0.4BBS Add/List Door     By The SkeletoN [07-20-93]\r\n");
  83.    pl("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
  84.    pl("[A] -- Add a number to database.\r\n");
  85.    pl("[D] -- Delete a number from database.\r\n");
  86.    pl("[E] -- Edit a number in database.\r\n");
  87.    pl("[L] -- List Numbers in the database.\r\n");
  88.    pl("[S] -- Search for a number in database.\r\n");
  89.    pl("[Q] -- Quit back to the BBS.\r\n\r\n");
  90.    pl("Select [A,D,E,L,S,Q] : ");
  91.    input(string1,1);
  92.    DROP;
  93.    if((string1[0] == 'q') || (string1[0] == 'Q')) Test = 0;
  94.    if((string1[0] == 'a') || (string1[0] == 'A')) New();
  95.    if((string1[0] == 'l') || (string1[0] == 'L')) List();
  96.    if((string1[0] == 'e') || (string1[0] == 'E')) Edit();
  97.   }
  98.  CloseStuff();
  99. }
  100.  
  101. //*************************
  102. //*****  List Entrys  *****
  103. //*************************
  104.  
  105. List()
  106. {
  107.  int fd,stat,lines;
  108.  lines=0;
  109.  fd=Open("DOORS:DSKEL-BAL.Data",MODE_OLDFILE);
  110.  if(fd==0) { pl("Error reading Doors:DSKEL-BAL.Data\n\r"); return(0); }
  111.  
  112.  pl("\f");
  113.  ReadRecord:
  114.  stat=Read(fd,(char *)&BL,sizeof(struct BBSLIST));
  115.  if(stat<=0)
  116.   {
  117.    pl("Hit any key:");
  118.    hotkey(string1);
  119.    Close(fd);
  120.    return(0);
  121.   }
  122.  pl("   [Name%-20s      %s Nodes]      [Sysop%-20s\r\n",
  123.      BL.Name,BL.Nodes,BL.Sysop);
  124.  pl("  [Phone%-20s     [%4s Megs]     [Groups%-20s\r\n",
  125.      BL.Number,BL.Megs,BL.Groups);
  126.  pl("[Located%-20s    [%5s Baud]    [Support%-20s\r\n\r\n",
  127.                     BL.Location,BL.Baud,BL.Support);
  128.  lines+=4;
  129.  if(lines+4>User.Length)
  130.   {
  131.    pl("Hit any key:");
  132.    hotkey(string1);
  133.    lines=0;
  134.    pl("\r\n\r\n");
  135.   }
  136.  goto ReadRecord;
  137. }
  138.  
  139. //***************************
  140. //*****  Add New Entry  *****
  141. //***************************
  142.  
  143. New()
  144. {
  145.  int fd;
  146.  pl("\f                    [--------------------]\r\n");
  147.  pl("           BBS Name: ");
  148.  input(BL.Name,20);
  149.  DROP;
  150.  pl("\r\n                    [--------------------]\r\n");
  151.  pl("       Phone Number: ");
  152.  input(BL.Number,20);
  153.  DROP;
  154.  pl("\r\n                    [--------------------]\r\n");
  155.  pl("             Groups: ");
  156.  input(BL.Groups,20);
  157.  DROP;
  158.  pl("\r\n                    [--------------------]\r\n");
  159.  pl("           Location: ");
  160.  input(BL.Location,20);
  161.  DROP;
  162.  pl("\r\n                    [--------------------]\r\n");
  163.  pl("              Sysop: ");
  164.  input(BL.Sysop,20);
  165.  DROP;
  166.  pl("\r\n                    [--------------------]\r\n");
  167.  pl("  Formats Supported: ");
  168.  input(BL.Support,20);
  169.  DROP;
  170.  pl("\r\n                    [-]\r\n");
  171.  pl("            # Nodes: ");
  172.  input(BL.Nodes,1);
  173.  DROP;
  174.  pl("\r\n                    [----]\r\n");
  175.  pl("    Megs of Storage: ");
  176.  input(BL.Megs,4);
  177.  DROP;
  178.  pl("\r\n                    [-----]\r\n");
  179.  pl("      Max Buad Rate: ");
  180.  input(BL.Baud,5);
  181.  DROP;
  182.  pl("\r\nSave to database [y/n");
  183.  input(string1,1);
  184.  DROP;
  185.  if((string1[0] =='n') || (string1[0] == 'N')) return(0);
  186.  
  187. //***********************************
  188. //*****  Write DSKEL-BAL.Data  ******
  189. //***********************************
  190.  
  191.  fd=Open("DOORS:DSKEL-BAL.Data",MODE_OLDFILE);
  192.  if(fd==0)
  193.   {
  194.    fd=Open("DOORS:DSKEL-BAL.Data",MODE_NEWFILE);
  195.    if(fd==0)
  196.     {
  197.      pl("Error writing Doors:DSKEL-BAL.Data!\r\n");
  198.      CloseStuff();
  199.    }
  200.   }
  201.  else
  202.    Seek(fd,0,OFFSET_END);
  203.  Write(fd,(char *)&BL ,sizeof(struct BBSLIST));
  204.  Close(fd);
  205.  return(0);
  206. }
  207.  
  208. //*************************
  209. //*****  Edit Entrys  *****
  210. //*************************
  211.  
  212. Edit()
  213. {
  214.  char string[255];
  215.  int fd,Slot;
  216.  long Position;
  217.  pl("Edit which Entry?: ");
  218.  input(string,3);
  219.  DROP;
  220.  Slot = atoi(string);
  221.  fd=Open("DOORS:DSKEL-BAL.Data",MODE_OLDFILE);
  222.  if(fd==0)
  223.   {
  224.    pl("Error reading Doors:DSKEL-BAL.Data\n\r"); return(0);
  225.   }
  226.  Slot--;
  227.  Position = Slot * sizeof(struct BBSLIST);
  228.  Seek(fd,Position,0);
  229.  Read(fd,(char *)&BL,sizeof(struct BBSLIST));
  230.  Close(fd);
  231.  pl("\f                    [--------------------]\r\n");
  232.  pl("           BBS Name: ");
  233.  LineInput(BL.Name,string,20);
  234.  DROP;
  235.  strcpy(BL.Name,string);
  236.  pl("\r\n                    [--------------------]\r\n");
  237.  pl("       Phone Number: ");
  238.  LineInput(BL.Number,string,20);
  239.  DROP;
  240.  strcpy(BL.Number,string);
  241.  pl("\r\n                    [--------------------]\r\n");
  242.  pl("             Groups: ");
  243.  LineInput(BL.Groups,string,20);
  244.  DROP;
  245.  strcpy(BL.Groups,string);
  246.  pl("\r\n                    [--------------------]\r\n");
  247.  pl("           Location: ");
  248.  LineInput(BL.Location,string,20);
  249.  DROP;
  250.  strcpy(BL.Location,string);
  251.  pl("\r\n                    [--------------------]\r\n");
  252.  pl("              Sysop: ");
  253.  LineInput(BL.Sysop,string,20);
  254.  DROP;
  255.  strcpy(BL.Sysop,string);
  256.  pl("\r\n                    [--------------------]\r\n");
  257.  pl("  Formats Supported: ");
  258.  LineInput(BL.Support,string,20);
  259.  DROP;
  260.  strcpy(BL.Support,string);
  261.  pl("\r\n                    [-]\r\n");
  262.  pl("            # Nodes: ");
  263.  LineInput(BL.Nodes,string,1);
  264.  DROP;
  265.  strcpy(BL.Nodes,string);
  266.  pl("\r\n                    [----]\r\n");
  267.  pl("    Megs of Storage: ");
  268.  LineInput(BL.Megs,string,4);
  269.  DROP;
  270.  strcpy(BL.Megs,string);
  271.  pl("\r\n                    [-----]\r\n");
  272.  pl("      Max Buad Rate: ");
  273.  LineInput(BL.Baud,string,5);
  274.  DROP;
  275.  strcpy(BL.Baud,string);
  276.  pl("\r\nSave changes to database [y/n");
  277.  input(string1,1);
  278.  DROP;
  279.  if((string1[0] =='n') || (string1[0] == 'N')) return(0);
  280.  
  281. //***********************************
  282. //*****  Write DSKEL-BAL.Data  ******
  283. //***********************************
  284.  
  285.  fd=Open("DOORS:DSKEL-BAL.Data",MODE_OLDFILE);
  286.  if(fd==0)
  287.     pl("Error writing Doors:DSKEL-BAL.Data!\r\n");
  288.  else
  289.  Seek(fd,Position,0);
  290.  Write(fd,(char *)&BL ,sizeof(struct BBSLIST));
  291.  Close(fd);
  292.  return(0);
  293. }
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304. //*************************
  305. //*****  Close Stuff  *****
  306. //*************************
  307.  
  308. void CloseStuff()
  309. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  310.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  311.  if(MyPort) DeletePort(MyPort);
  312.  exit(0); }
  313.  
  314. //********************
  315. //*****  DoorIO  *****
  316. //********************
  317.  
  318. int DOORIO()
  319. {
  320.  struct MsgPort *HisPort;
  321.  struct MyMessage message;
  322.  int UPDATE;
  323.  if(EXIT_FLAG) return 0;
  324.  UPDATE=0;
  325.  HisPort = FindPort(st);
  326.  if(HisPort!=NULL)
  327.   {
  328.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  329.    message.Msg.mn_Length = sizeof(message);
  330.    message.Msg.mn_ReplyPort = MyPort;
  331.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  332.    message.car   = 0;
  333.    message.Data  = DOOR_DATA;
  334.    message.Value = DOOR_VALUE;
  335.    message.IntValue = DOOR_VALUE1;
  336.    strcpy(message.text,DOOR_MSG);
  337.    strcpy(message.text1,DOOR_MSG1);
  338.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  339.    Wait(1 << MyPort->mp_SigBit);
  340.    GetMsg(MyPort);
  341.    DOOR_DATA  = message.Data;
  342.    DOOR_VALUE = message.Value;
  343.    DOOR_VALUE1 = message.IntValue;
  344.    strcpy(DOOR_MSG,message.text);
  345.    strcpy(DOOR_MSG1,message.text1);
  346.    CopyMem(&message.User,&User,sizeof(struct User));
  347.    first=1;
  348.    UPDATE=0;
  349.    if(message.car) EXIT_FLAG=1;
  350.   }
  351.  return 0;
  352. }
  353.  
  354. //************************
  355. //*****  Door Start  *****
  356. //************************
  357.  
  358. DoorStart(char node[])
  359. {
  360.  struct MsgPort *HisPort;
  361.  EXIT_FLAG = 0;
  362.  sprintf(st,"%s:TEMPEST_DOOR",node);
  363.  HisPort = FindPort(st);
  364.  if(HisPort==NULL) return (FALSE);
  365.  sprintf(MyName,"%s:DOOR_PORT",node);
  366.  MyPort = CreatePort(MyName,0L);
  367.  if(MyPort==NULL)
  368.   {
  369.    puts("Cant open port");
  370.    return(int)FALSE;
  371.   }
  372.  DOORIO();
  373.  return (int)TRUE;
  374. }
  375.  
  376. //*********************
  377. //*****  Hot Key  *****
  378. //*********************
  379.  
  380. int hotkey(char character[])
  381. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=20; DOORIO(); strcpy(character,DOOR_MSG);
  382.  return((int)character[0]); }
  383.  
  384. //*******************
  385. //*****  Input  *****
  386. //*******************
  387.  
  388. void input(char mstring[],int len)
  389. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  390.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  391.  
  392. //************************
  393. //*****  Line Input  *****
  394. //************************
  395.  
  396. void LineInput(char ostring[],char mstring[],int len)
  397. { DOOR_DATA=41; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); strcpy(DOOR_MSG1,ostring);
  398.  DOORIO(); strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  399.